#ifndef ANTLRV4PARSERBASE_H
#define ANTLRV4PARSERBASE_H
#pragma once

#include "antlr4-runtime.h"
#include "rule_traits.hpp"

class ANTLRv4ParserBase : public antlr4::Parser
{
public:
	ANTLRv4ParserBase(antlr4::TokenStream *input);
	~ANTLRv4ParserBase();
	std::string parserRuleNameToContextName(const std::string &ruleName);
	bool ruleIsParserRule(antlr4::ParserRuleContext *context);
	const RuleCollection &ruleCollection() const;
	const RuleCollection &invisibleRules() const;
	/**
	 * Triggered every time a parser rule is found
	 */
	void findParserRule(antlr4::ParserRuleContext *context);
	void reset();

protected:
	/**
	 * Rules with #LABEL alternative is not visible to visitor , used as the base class instead 
	 */
	RuleCollection rulesVisibleToVisitor_;
	RuleCollection rulesInvisibleToVisitor_;

};
#endif
